package com.ioc;

import com.ioc.config.SpringConfig;
import com.ioc.dao.BookDao;
import com.ioc.dao.UserDao;
import com.ioc.dao.impl.UserDaoImpl;
import com.ioc.proxy.JdkDynamicProxy;
import com.ioc.service.UserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 动态代理有两种实现方式：
 * 1 jdk动态代理：要求目标对象必须要实现接口
 * 2 cglib动态代理：一个普通的目标对象就可以进行代理，无需实现接口
 *
 * 对于动态代理而言，同一种功能的增强只需要写一个代理类，不同的功能增强就需要写不同的代理类
 *
 */
public class DITest01 {


    public static void main(String[] args) {
        //1 创建目标对象
        UserDao userDao = new UserDaoImpl();
        //2 创建JdkDynamicProxy
        JdkDynamicProxy jdkDynamicProxy = new JdkDynamicProxy(userDao);
        //3 调用JdkDynamicProxy对象中的getProxyObject方法生成代理对象
        UserDao proxyObject = (UserDao) jdkDynamicProxy.getProxyObject();
        //4 执行
        proxyObject.save();

    }



}
